Java Technologies MapStruct এর মাধ্যমে Custom Type Conversion করা গাইড ও নোট

229

MapStruct একটি শক্তিশালী Java মডেল ম্যাপিং টুল যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে দ্রুত এবং সঠিকভাবে ডেটা ম্যাপিং সম্পন্ন করতে সহায়তা করে। এটি মূলত compile-time এ কোড জেনারেট করে এবং রানটাইমে অতিরিক্ত প্রসেসিং বা রিফ্লেকশন ব্যবহার না করে পারফরম্যান্সে সহায়তা করে। Custom Type Conversion হল MapStruct এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনি যখন ডোমেইন অবজেক্ট এবং DTO এর মধ্যে ম্যাপিং করতে চান এবং বিশেষ কাস্টম কনভার্সন লজিক প্রয়োগ করতে চান তখন ব্যবহৃত হয়।

Custom Type Conversion প্রয়োজন হয় যখন আপনি কোন নির্দিষ্ট প্রপার্টির মধ্যে কাস্টম কনভার্টার বা লজিক প্রয়োগ করতে চান, যেমন ডেটা ফরম্যাট কনভার্ট করা বা এনামের (enum) মান ট্রান্সফর্ম করা।


১. Custom Type Conversion এর প্রয়োজনীয়তা

Custom Type Conversion এর প্রয়োজনীয়তা তখনই ঘটে যখন MapStruct এর ডিফল্ট ম্যাপিং লজিক আপনার প্রয়োজন অনুযায়ী কাজ না করে। কিছু উদাহরণ দেওয়া হল যেখানে কাস্টম টাইপ কনভার্সন প্রয়োজন হতে পারে:

  • String to Date Conversion: যদি আপনি একটি String ফিল্ডকে Date ফিল্ডে কনভার্ট করতে চান।
  • Enum to String Conversion: যদি একটি Enum মানকে String এ রূপান্তর করতে চান।
  • Complex Object Mapping: যদি আপনার অবজেক্টে কিছু কাস্টম কনভার্সন লজিক (যেমন গণনা, ফিল্ডের রূপান্তর) প্রয়োজন হয়।
  • Custom Date Format: যদি ডেটার ফরম্যাট কনভার্ট করতে হয়, যেমন yyyy-MM-dd থেকে MM/dd/yyyy

২. Custom Type Conversion উদাহরণ

এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে আমরা String থেকে Date কনভার্ট করব এবং একটি Enum মানকে String এ কনভার্ট করব।

২.১ String to Date Conversion

ধরা যাক আমাদের একটি EmployeeDTO অবজেক্ট আছে যেখানে dateOfBirth একটি String হিসেবে থাকবে, এবং আমরা এটি Date এ কনভার্ট করতে চাই।

EmployeeDTO.java
public class EmployeeDTO {
    private String name;
    private String dateOfBirth; // String type
    private Date dateOfBirthConverted; // Date type

    // Getters and Setters
}

এখন, আমরা String থেকে Date কনভার্ট করার জন্য একটি কাস্টম কনভার্সন তৈরি করব।

EmployeeMapper.java
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.text.SimpleDateFormat;
import java.util.Date;

@Mapper
public interface EmployeeMapper {
    EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);

    @Mapping(source = "dateOfBirth", target = "dateOfBirthConverted", dateFormat = "yyyy-MM-dd")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);

    // Custom method for String to Date conversion
    default Date stringToDate(String date) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.parse(date);
        } catch (Exception e) {
            return null;  // Handle error or return default value
        }
    }
}

এখানে, stringToDate মেথডটি একটি কাস্টম কনভার্টার হিসেবে কাজ করছে যা String ফরম্যাট yyyy-MM-dd থেকে Date ফরম্যাটে কনভার্ট করবে।


২.২ Enum to String Conversion

এখন, ধরুন আমাদের একটি GenderEnum রয়েছে এবং আমরা এই Enum থেকে String এ কনভার্ট করতে চাই।

GenderEnum.java
public enum GenderEnum {
    MALE, FEMALE, OTHER;
}
EmployeeDTO.java (এনামের মান String এ কনভার্ট করার জন্য)
public class EmployeeDTO {
    private String name;
    private String gender; // String type to represent the Enum

    // Getters and Setters
}
EmployeeMapper.java (কাস্টম এনাম কনভার্টার)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface EmployeeMapper {
    EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);

    @Mapping(source = "gender", target = "gender")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);

    // Custom method to convert Enum to String
    default String genderToString(GenderEnum gender) {
        if (gender != null) {
            return gender.name();
        } else {
            return null;  // Or return default value
        }
    }
}

এখানে, genderToString মেথডটি GenderEnum এর মানকে String এ কনভার্ট করার জন্য ব্যবহার হচ্ছে।


৩. Custom Type Conversion এর উপকারিতা

  • কাস্টম কনভার্সন ব্যবহারের মাধ্যমে আপনি complex transformation সম্পাদন করতে পারেন যা ডিফল্ট MapStruct ম্যাপিংয়ের বাইরে যায়।
  • এটি null checking এবং error handling সহজ করে তোলে, কারণ আপনি কাস্টম লজিক ব্যবহার করে null ভ্যালু বা ভুল ফরম্যাট হ্যান্ডেল করতে পারবেন।
  • স্ট্রিং থেকে ডেটা কনভার্ট, এনাম থেকে স্ট্রিং কনভার্ট, বা কমপ্লেক্স অবজেক্ট ম্যাপিং এর ক্ষেত্রে এটি অত্যন্ত উপকারী।

৪. MapStruct এর সাথে Custom Type Conversion ব্যবহারের জন্য নির্দেশনা

  1. Default Methods: MapStruct আপনাকে default methods ব্যবহার করার মাধ্যমে কাস্টম কনভার্সন তৈরি করতে দেয়, যা সরাসরি Mapper ইন্টারফেসে যুক্ত করা যায়।
  2. MapStruct Integration: এটি সহজেই Spring, Quarkus, JPA ইত্যাদির সাথে ইন্টিগ্রেট করা যায়।
  3. Error Handling: কাস্টম কনভার্টারে সঠিক ত্রুটি সন্নিবেশিত করা যায় যাতে কোনো ভুল ইনপুট ডেটা আসলে তা সঠিকভাবে হ্যান্ডেল করা যায়।
  4. Reusable Conversion Methods: কাস্টম কনভার্টারগুলো আপনি বিভিন্ন Mapper এ ব্যবহার করতে পারেন, যা কোডের পুনরাবৃত্তি কমায়।

সারাংশ

MapStruct এর মাধ্যমে Custom Type Conversion করা অত্যন্ত সহজ এবং কার্যকরী। আপনি কাস্টম কনভার্সন মেথড ব্যবহার করে String to Date, Enum to String এবং অন্যান্য কাস্টম ট্রান্সফরমেশন কাজ করতে পারেন। এতে MapStruct এর সাধারণ ম্যাপিং লজিকের বাইরে বিশেষ কনভার্সন প্রয়োগ করা যায়, যা আপনার প্রোজেক্টে ডেটা প্রক্রিয়াকে আরও কার্যকরী ও সঠিক করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...